﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Tibet.Entidades;
using Tibet.Logica.Excepciones;
using Tibet.Datos;
using System.Web.UI.DataVisualization.Charting;
using iTextSharp.text;
using Color = System.Drawing.Color;
using Font = System.Drawing.Font;
using System.Drawing;
using System.Data;

namespace Tibet.Logica
{
    public class Usuario
    {

        DatosUsuario _datosUsuario;
        Credencial _login;
        Rol _rol;

      //  String nombre;
        String apellido;
        String mail;
        String usename;

        ///<summary>
        ///Descripción: Get y Set del atributo _datosCliente
        ///<summary>
        public DatosUsuario DatosUsuario
        {

            get { return _datosUsuario; }
            set { _datosUsuario = value; }

        }

        ///<summary>
        ///Descripción: Get y Set del atributo _login
        ///<summary>
        public Credencial Login
        {

            get { return _login; }
            set { _login = value; }

        }

        ///<summary>
        ///Descripción: Get y Set del atributo _rol
        ///</summary>
        public Rol Rol
        {

            get { return _rol; }
            set { _rol = value; }

        }

        ///<summary>
        ///Descripción: Método para crear un usuario
        ///</summary>
        public void CrearUsuario()
        {
        }

        /// <summary>
        /// Constructor de la clase
        /// </summary>
        public Usuario()
        {

            this._login = new Credencial();
            this._rol = new Rol();
            this._datosUsuario = new DatosUsuario();

        }

        ///<summary>
        ///Descripción: Método para buscar un usuario en la base de datos
        ///</summary>
        public List<Tibet.Entidades.Usuario> ConsultarUsuario()
        {
            //Consultamos en base de datos la lista de usuario existentes

            List<Entidades.Usuario> lista = new List<Entidades.Usuario>();

            AccesoUsuario acceso = new AccesoUsuario();
            lista = acceso.ConsultarUsuarios();
            return lista;

        }

        ///<summary>
        ///Descripción: Método para pedir a la capa de logica que devuelva una lista con todos los usuarios que se necesitan para 
        ///devolver la busqueda para modificar usuario
        ///</summary>
        public DataTable ListaUsuarios(String nombre, String apellido)
        {
            
            
            AccesoUsuario miAcceso = new AccesoUsuario();
            return miAcceso.BuscarUsuario(nombre, apellido);

        }

        ///<summary>
        ///Descripción: Método para pasar los datos a la capa de datos para hacer el update 
        ///</summary>
        public bool DatosAModificar(String nombre, String apellido, String alias, String clave, String correo)
        {


            AccesoUsuario miAcceso = new AccesoUsuario();
            return miAcceso.modificarUsuario(nombre, apellido, alias, clave, correo);

        }

        ///<summary>
        ///Descripción: Método para conocer si existe un usuario con el emailo alias
        ///que se modifico
        ///</summary>
        public int ExisteUsuario()
        {

            int contadorUsuarios = 0;
            try
            {
                
            }
            catch (ExcepcionConexionBD AccesoBD)///Problemas con conexion a BD
            {

            }
            catch (ExcepcionQuery ErrorBD)///Error al hacer query en BD
            {

            }
            catch (ArgumentNullException ValorNulo)///Base de datos retorna valor nulo
            {

            }
            catch (Exception e)///Captura los demas errores
            {

            }
            
            
            return contadorUsuarios;

        }

        /// <summary>
        /// Este metodo llena la tabla con los errores por desarrollador
        /// </summary>
        /// <param name="clave"> recibe el id de la lista</param>
        /// <returns></returns>
        public List<ErrorP> ConsultarErrorPorDesarrollador(int idDesa, int anio)
        {

            List<ErrorP> lista = new List<ErrorP>();
            AccesoUsuario desarrolladorSeleccionado = new AccesoUsuario();

            lista = desarrolladorSeleccionado.ConsultarErroresPorDesarrollador(idDesa, anio);

            return lista;
        }
    

	    ///<summary>
        ///Descripción: Método para revisar si un usuario  esta en la base de datos
        ///</summary>
        public Boolean RevisarUsuario(Usuario user)
        {
            this.Login.Alias = "Prueba2";
            this.Login.Clave = "12345";
            this.Rol.Nombre = "Administrador";
            this.Rol.IngresarPrivilegio(2);
            this.DatosUsuario.Id = 2;
            this.DatosUsuario.Nombre = "Leo";
            this.DatosUsuario.Apellido = "Pugo";
            this.DatosUsuario.Email = "blas@gmail.com";

            try
            {

                ///Consulta en base de datos si existe el usuario
				if ((this.Login.Alias != user.Login.Alias) |
               (this.DatosUsuario.Email != user.DatosUsuario.Email))  
				    return true;
				
				else
                    return false;

            }
            catch (ExcepcionConexionBD AccesoBD)///Problemas con conexion a BD
            {

            }
            catch (ExcepcionQuery ErrorBD)///Error al hacer query en BD
            {

            }
            catch (ArgumentNullException ValorNulo)///Base de datos retorna valor nulo
            {

            }
            catch (Exception e)///Captura los demas errores
            {

            }

            return false;
 
        }


        ///<summary>
        ///Descripción: Método para modificar un usuario de la base de datos
        ///</summary>
        public void ModificarUsuario()
        {

            try
            {

                ///Modificacion del usuario en la BD

            }
            catch (ExcepcionConexionBD AccesoBD)///Problemas con conexion a BD
            {

            }
            catch (ExcepcionQuery ErrorBD)///Error al hacer query en BD
            {

            }
            catch (Exception e)///Captura los demas errores
            {

            }
			

        }

        ///<summary>
        ///Descripción: Método para buscar un usuario en la base de datos
        ///</summary>
        public Usuario ConsultarUsuario(Usuario user)
        {
            //Consultamos en base de datos si ese usuario existe
            Usuario usuarioConsultado = new Usuario();

            return usuarioConsultado;

        }

        ///<summary>
        ///Descripción: Método para insertar un usuario en la base de datos
        ///</summary>
        public void InsertarUsuario()
        {

            try
            {

                ///Insertado del usuario en BD

            }
            catch (ExcepcionConexionBD AccesoBD)///Problemas con conexion a BD
            {

            }
            catch (ExcepcionQuery ErrorBD)///Error al hacer query en BD
            {

            }
            catch (Exception e)///Captura los demas errores
            {

            }

        }

        /// <summary>
        /// metodo para graficar por errores
        /// </summary>
        /// <param name="listaErrores"></param>

        public void GraficarPorErrores(List<ErrorP> listaErrores)
        {

            int pe = 0;
            int j = 0;
            int maxcantidad = 0;

            for (int i = 0; i < listaErrores.Count; i++)
            {
                pe = listaErrores.ElementAt(i).Cant;
                j = i;

                if (pe > maxcantidad)
                {
                    maxcantidad = pe;
                }
            }

            Chart myChart = new Chart();
            myChart.Height = 350;
            myChart.Width = 350;

            ChartArea myChartArea = new ChartArea();
            myChart.ChartAreas.Add(myChartArea);

            Series series = new Series("mySeries");

            for (int i = 0; i < listaErrores.Count; i++)
            {
                series.Points.AddXY(listaErrores.ElementAt(i).mes, listaErrores.ElementAt(i).Cant);

            }

            //System.Windows.Forms.MessageBox.Show("hola");
            myChart.Series.Add(series);

            Font font = new Font("Arial", 24, FontStyle.Bold);
            Title title = new Title();
            title.Text = "Errores por Desarrollador";
            title.Font = font;

            myChart.Titles.Add(title);

            myChart.SaveImage(@"C:\Aplicaciones\Segunda Entrega\Tibet\Tibet\ImagenesEstadistica\ErroresPorDesarrollador.png", ChartImageFormat.Png);
            //Image1.ImageUrl = @"C:\aplicaciones\test2.png";
        }

        //public void GraficarPorErroresProyecto(List<Entidades.Proyecto> listaErrores)
        //{

        //    int pe = 0;
        //    int j = 0;
        //    int maxcantidad = 0;

        //    for (int i = 0; i < listaErrores.Count; i++)
        //    {
        //        //en funcion de los dias
        //        pe = listaErrores.ElementAt(i).Dias;
        //        j = i;

        //        if (pe > maxcantidad)
        //        {
        //            maxcantidad = pe;
        //        }
        //    }

        //    Chart myChart = new Chart();
        //    myChart.Height = 350;
        //    myChart.Width = 350;

        //    ChartArea myChartArea = new ChartArea();
        //    myChart.ChartAreas.Add(myChartArea);

        //    Series series = new Series("mySeries");

        //    for (int i = 0; i < listaErrores.Count; i++)
        //    {
        //        //en funcion del estatus y de los dias para graficar
        //        series.Points.AddXY(listaErrores.ElementAt(i).Estatus, listaErrores.ElementAt(i).Dias);

        //    }

        //    //System.Windows.Forms.MessageBox.Show("hola");
        //    myChart.Series.Add(series);

        //    Font font = new Font("Arial", 24, FontStyle.Bold);
        //    Title title = new Title();
        //    title.Text = "Errores por Cliente";
        //    title.Font = font;

        //    myChart.Titles.Add(title);

        //    myChart.SaveImage(@"C:\aplicaciones\ErroresPorClientes.png", ChartImageFormat.Png);
        //    //Image1.ImageUrl = @"C:\aplicaciones\test2.png";
        //}

    }
}